﻿using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Web;
using kTudu.Web.Models;
using System.Data;

namespace kTudu.Web.Applications
{
    public class UserClientApplication : BaseApplication
    {
        #region Constructores

        public UserClientApplication(Entities _context)
            : base(_context)
        {

        }

        public UserClientApplication()
        {
        }

        #endregion

        /// <summary>
        /// Devuelve si el usuario y password indicado es valido
        /// </summary>
        /// <param name="loginName">Nombre de usuario</param>
        /// <param name="password">Contraseña</param>
        /// <returns></returns>
        public bool IsValid(string loginName, string password)
        {
            // TODO: Aplicar encriptacion MD5
            //password = Helper.Encrypt(password);

            var user = _context.UserClients
                                .Where(u => u.Login == loginName && u.Password == password)
                                .FirstOrDefault();

            return user != null;
        }

        /// <summary>
        /// Obtiene un usuario por su id
        /// </summary>
        /// <param name="id">Id de Usuario</param>
        /// <returns></returns>
        public UserClient Get(int id)
        {
            var user = _context.UserClients
                               .Include(u => u.Rol)
                               .Include(u => u.UserData)
                               .First(t => t.IdUserClient == id);
            return user;
        }

        /// <summary>
        /// Obtiene un usuario a traves del nombre de usuario
        /// </summary>
        /// <param name="login">Nombre de usuario</param>
        /// <returns></returns>
        public UserClient Get(string login)
        {
            var user = _context.UserClients
                               .Where(u => u.Login == login).FirstOrDefault();

            return user;
        }

        /// <summary>
        /// Actualiza el Usuario
        /// </summary>
        /// <param name="userClient">Usuario</param>
        public void Update(UserClient userClient)
        {
            UpdateUserData(userClient);

            _context.Entry(userClient).State = EntityState.Modified;
            _context.SaveChanges();
        }

        private void UpdateUserData(UserClient userClient)
        {
            if (userClient.UserData != null)
                _context.Entry(userClient.UserData).State = EntityState.Modified;
        }
    }
}